﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SISCON.Model;
using SISCON.Dao;
using log4net;
using SISCON.Common;

namespace SISCON.Bl
{
    /// <summary>
    /// Pasa al dao corespondiente los datos de Session
    /// </summary>
    public class SessionBL
    {
        private static ILog _Logger = LogManager.GetLogger(typeof(SessionBL));

        private SessionDAO _SessionDAO = new SessionDAO();
        
        /// <summary>
        /// Crea una session del Usuario
        /// </summary>
        /// <param name="user">Usuario</param>
        /// <returns>Session del usuario</returns>
        public string CreateSession(User user)
        {
            try
            {
                return _SessionDAO.CreateSession(user);
            }
            catch (Exception ex)
            {
                if (!(ex is SISCONException))
                {
                    _Logger.Error("Error in CreateSession()", ex);
                }
                throw ex;
            }
        }
        
        /// <summary>
        /// Verifica la session actual del usuario
        /// </summary>
        public void SessionVerif()
        {
            try
            {
                _SessionDAO.SessionVerif();
            }
            catch (Exception ex)
            {
                if (!(ex is SISCONException))
                {
                    _Logger.Error("Error in SessionVerif()", ex);
                }
                throw ex;
            }
        }
        
        /// <summary>
        /// pasa al dao correspondiente la session del usuario y el nombre del proyecto
        /// </summary>
        /// <param name="sessionUUID">Session del usuario</param>
        /// <param name="proyectName">Nombre del proyecto</param>
        /// <returns>Lista de todas las sessiones</returns>
        public List<Session> GetSessions(string sessionUUID, string proyectName)
        {
            try
            {
                List<Session> sessions = _SessionDAO.GetSessions(sessionUUID, proyectName);
                return sessions;
            }
            catch (Exception ex)
            {
                if (!(ex is SISCONException))
                {
                    _Logger.Error("Error in GetSessions()", ex);
                }
                throw ex;
            }
        }
        
        /// <summary>
        /// Pasa al dao correspondiente la session del usuario 
        /// </summary>
        /// <param name="sessionUUID">session del usuario</param>
        /// <returns>La Session del usuario</returns>
        public Session GetSession(string sessionUUID)
        {
            try
            {
                Session session = _SessionDAO.GetSession(sessionUUID);
                return session;
            }
            catch (Exception ex)
            {
                if (!(ex is SISCONException))
                {
                    _Logger.Error("Error in GetSession()", ex);
                }
                throw ex;
            }
        }
        
        /// <summary>
        /// pasa al dao la session para que se actualize
        /// </summary>
        /// <param name="sessionUUID">Session del usuario</param>
        public void UpdateSession(string sessionUUID)
        {
            try
            {
                _SessionDAO.UpdateSession(sessionUUID);
            }
            catch (Exception ex)
            {
                if (!(ex is SISCONException))
                {
                    _Logger.Error("Error in UpdateSession()", ex);
                }
                throw ex;
            }
        }
    }
}